AFlow 与 SPO:自动化工作流生成与提示优化
MetaGPT 团队在自动化智能体工作流生成和提示工程领域进行了深入研究,推出了两个重要的研究成果:AFlow 和 SPO。
AFlow:自动化智能体工作流生成

概述
AFlow (Automating Agentic Workflow Generation) 是一个自动生成和优化智能体工作流的框架。它使用蒙特卡洛树搜索(MCTS)在代码表示的工作流空间中寻找有效的工作流,用机器努力替代人工开发。
论文:AFlow: Automating Agentic Workflow Generation
ICLR 2025 Oral Presentation(前 1.8%),LLM Agent 类别排名第 2
核心方法

AFlow 的核心组件:
| 组件 | 说明 |
|---|---|
| Node | LLM 调用的基本单元 |
| Operator | 预定义的 Node 组合,提高搜索效率 |
| Workflow | 由 Node 和边组成的执行图 |
| Optimizer | 使用 MCTS 变体探索和优化工作流 |
| Evaluator | 评估工作流在给定任务上的表现 |
工作原理
text
初始工作流
│
▼
┌─────────────┐
│ 选择 │ MCTS Selection
│ (Selection) │
└─────────────┘
│
▼
┌─────────────┐
│ 扩展 │ 生成新的工作流变体
│ (Expansion) │
└─────────────┘
│
▼
┌─────────────┐
│ 评估 │ 在验证集上测试
│(Evaluation) │
└─────────────┘
│
▼
┌─────────────┐
│ 更新 │ 反向传播结果
│ (Update) │
└─────────────┘
│
└──▶ 迭代直到收敛预定义 Operator
AFlow 提供了常用的 Operator:
| Operator | 功能 |
|---|---|
Generate | 生成内容 |
Format | 格式化输出 |
Review | 审查内容 |
Revise | 修改内容 |
Ensemble | 集成多个结果 |
Test | 测试代码 |
Programmer | 编程任务 |
快速开始
bash
# 安装依赖
pip install metagpt
# 下载数据集
python metagpt/ext/aflow/data/download_data.py
# 运行优化
python -m examples.aflow.optimize --dataset MATH配置参数
python
--dataset # 数据集类型 (HumanEval/MBPP/GSM8K/MATH/HotpotQA/DROP)
--sample 4 # 采样数量
--optimized_path PATH # 结果保存路径
--initial_round 1 # 起始轮次
--max_rounds 20 # 最大迭代轮次
--check_convergence # 启用早停
--validation_rounds 5 # 验证轮次
--if_first_optimize # 是否首次优化实验结果

AFlow 在 6 个数据集上的表现:
| 数据集 | 任务类型 |
|---|---|
| HumanEval | 代码生成 |
| MBPP | 代码生成 |
| GSM8K | 数学推理 |
| MATH | 数学推理 |
| HotpotQA | 问答 |
| DROP | 阅读理解 |
SPO:自监督提示优化

概述
SPO (Self-Supervised Prompt Optimization) 是一个自动化提示工程工具,专为大语言模型设计,实现通用领域适配。
核心优势
| 优势 | 说明 |
|---|---|
| 超低成本 | 每个任务优化仅需 $0.15 |
| 零监督 | 无需真实标签或人工反馈 |
| 通用适配 | 支持封闭式和开放式任务 |
| 自我进化 | 通过 LLM-as-judge 机制自动优化 |
性价比对比
SPO 相比传统方法实现了 17.8-90.9 倍的成本效率提升!
实验结果
封闭式任务

SPO 仅需 1.1%-5.6% 的成本即可达到 SOTA 方法的性能水平。
开放式任务

SPO 在所有模型配置的开放式任务中都显著提升了性能。
快速开始
1. 配置 API
编辑 config/config2.yaml
2. 定义迭代模板
创建 metagpt/ext/spo/settings/task_name.yaml:
yaml
prompt: |
Please solve the following problem.
requirements: |
Generate more detailed thinking process.
count: None
qa:
- question: |
What is 2 + 2?
answer: |
The answer is 4.
- question: |
Explain photosynthesis.
answer: |
Photosynthesis is the process...3. 运行优化
Python 脚本方式:
python
from metagpt.ext.spo.components.optimizer import PromptOptimizer
from metagpt.ext.spo.utils.llm_client import SPO_LLM
# 初始化 LLM 设置
SPO_LLM.initialize(
optimize_kwargs={"model": "claude-sonnet-4-5", "temperature": 0.7},
evaluate_kwargs={"model": "gpt-4o-mini", "temperature": 0.3},
execute_kwargs={"model": "gpt-4o-mini", "temperature": 0}
)
# 创建并运行优化器
optimizer = PromptOptimizer(
optimized_path="workspace",
initial_round=1,
max_rounds=10,
template="Poem.yaml",
name="Poem",
)
optimizer.optimize()命令行方式:
bash
python -m examples.spo.optimize \
--opt-model claude-sonnet-4-5 \
--eval-model gpt-4o-mini \
--max-rounds 10 \
--template Poem.yamlStreamlit Web 界面:
bash
pip install "streamlit~=1.42.0"
python -m streamlit run metagpt/ext/spo/app.py输出结构
text
workspace/
└── Project_name/
└── prompts/
├── results.json # 优化结果记录
├── round_1/
│ ├── prompt.txt # 该轮优化的提示词
│ └── answers.txt # 使用该提示词生成的输出
├── round_2/
│ ├── prompt.txt
│ └── answers.txt
└── round_n/
├── prompt.txt
└── answers.txt模板字段说明
| 字段 | 说明 |
|---|---|
prompt | 初始提示词 |
requirements | 期望的效果/结果 |
count | 目标字数(None 表示不限) |
qa | 用于迭代的问答对 |
AFlow vs SPO 对比
| 特性 | AFlow | SPO |
|---|---|---|
| 优化对象 | 工作流结构 | 提示词内容 |
| 搜索方法 | MCTS | 自监督迭代 |
| 输入要求 | 数据集 | QA 对 |
| 输出结果 | 最优工作流 | 最优提示词 |
| 适用场景 | 复杂多步骤任务 | 单一提示优化 |
| 成本 | 较高 | 极低 |
与其他优化方法的关系
text
┌─────────────────────────────────────────────────────────┐
│ 提示优化领域 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 手工优化 │ │ DSPy 优化 │ │ SPO │ │
│ │ │ │ │ │ │ │
│ │ 人工迭代 │ │ 需要标签 │ │ 零监督 │ │
│ │ 成本高 │ │ 成本中 │ │ 成本极低 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
├─────────────────────────────────────────────────────────┤
│ 工作流优化领域 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 手工设计 │ │ LangGraph │ │ AFlow │ │
│ │ │ │ │ │ │ │
│ │ 专家经验 │ │ 代码定义 │ │ 自动搜索 │ │
│ │ 难以最优 │ │ 手动编排 │ │ 机器优化 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘引用
bibtex
@misc{zhang2024aflow,
title={AFlow: Automating Agentic Workflow Generation},
author={Jiayi Zhang and others},
year={2024},
eprint={2410.10762},
archivePrefix={arXiv}
}
@misc{xiang2025spo,
title={Self-Supervised Prompt Optimization},
author={Jinyu Xiang and others},
year={2025},
eprint={2502.06855},
archivePrefix={arXiv}
}下一节:16.5 框架对比